package com.msb.blob;

import java.util.concurrent.TimeUnit;

public class T6 {
   int count = 0;
   synchronized void m() {
       System.out.println(Thread.currentThread().getName() + "start ");
               while(true) {
                   count++;
                   System.out.println(Thread.currentThread().getName() + " count =" + count);
                       try {
                           TimeUnit.SECONDS.sleep(1);
                       } catch (InterruptedException e) {
                           e.printStackTrace();
                       }
                       if (count == 5) {
                           try {
                               int i = 1 / 0;//此处抛出异常，锁将被释放，要想不被释放，可以在这里进行catch，然后让循环继续
                           } catch (Exception e) {
                               System.out.println(e.getMessage());
                           }
                       }
                   }
               }
       public static void main(String[] args) {
           T6 t = new T6();

           new Thread(()->t.m(), "t1").start();

           try {
               TimeUnit.SECONDS.sleep(1);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }

           new Thread(()->t.m(), "t2").start();
       }
   }

//   分析：t1线程启动后，如果int i=1/0这里抛了异常后，
//   锁不被释放的话，t2线程就永远启动不起来，永远执行不了；
//    但是抛出异常之后，锁被释放了，t2得到了执行；